package com.yita.lambda;

import org.testng.annotations.Test;

import java.util.ArrayList;

public class Demo02_Syntax_omit {


    /**
     * 语法精简
     * 1.参数类型
     * 由于在接口的抽象方法中，已经定义了参数的数量类型 所以在Lambda表达式中参数的类型可以省略
     * 备注：如果需要省略类型，则每一个参数的类型都要省略，千万不要一个省略一个不省略
     */
    @Test
    public void test01() {
        LambdaNoneReturnMulParameter lambda1 = (int a, int b) -> {
            System.out.println("hello world"+a+b);
        };
//        可以精简为:
        LambdaNoneReturnMulParameter lambda1_ = (a, b) -> {
            System.out.println("hello world"+a+b);
        };
        lambda1_.test(1, 2);

    }

    /**
     * 2.参数小括号
     * 如果参数列表中，参数的数量只有一个 此时小括号可以省略
     */
    @Test
    public void test02(){
        LambdaNoneReturnSingleParameter lambda2=(a)->{
            System.out.println("hello world"+a);
        };
//        可以精简为:
        LambdaNoneReturnSingleParameter lambda2_= a->{
            System.out.println("hello world"+a);
        };
        lambda2_.test(1);
    }

    /**
     * 3.方法大括号
     * 如果方法体中只有一条语句，此时大括号可以省略
     */
    @Test
    public void test03(){
        LambdaNoneReturnSingleParameter lambda3=a->{
            System.out.println("hello world");
        };
//        可以精简为:
        LambdaNoneReturnSingleParameter lambda3_=a->System.out.println("hello world");
        lambda3_.test(2);
    }

    /**
     * 4.如果方法体中唯一的一条语句是一个返回语句
     * 贼省略大括号的同时 也必须省略return
     */
    @Test
    public void test04(){
        LambdaSingleReturnNoneParameter lambda4=()->{
            return 10;
        };
//        可以精简为:
        LambdaSingleReturnNoneParameter lambda4_=()->10;
        System.out.println(lambda4_.test());
    }


    @Test
    public void test05(){
        LambdaSingleReturnMulParameter lambda5=(a,b)->{
            return a+b;
        };
//        可以精简为:
        LambdaSingleReturnMulParameter lambda5_=(a,b)->a+b;

        System.out.println(lambda5_.test(1, 2));
    }
}

